With distributed computing, a computational project can be parsed into tasks and those tasks can be done in parallel and/or can be done with the amount of resources allocated to the project expanding and contracting as needed. This is useful in various fields, including cloud computing and other fields where computation is pushed out to a shared and varying set of resources. In such distributed computing environments, fault-tolerance and scalability are important.